#pragma once

#include "sys/IInterface.h"
#include "ChangeID.h"

interface IChangeManager;
interface IObserver;
class InterestedObjects;

interface ISubject : public IInterface
{
	DEFINE_IID(IID_Subject);

	virtual bool IsAttached(viid subjectIID, viid interestedObjectIID,IObserver* observer) = 0;
	virtual void Attach(viid subjectIID, viid interestedObjectIID,IObserver* observer) = 0;
	virtual void Detach(viid subjectIID, viid interestedObjectIID,IObserver* observer) = 0;
	virtual void Update(viid subjectIID, const InterestedObjects& interestedObjects,uint32 data=NULL) = 0;
	virtual void Update(viid subjectIID, viid interestedObjectIID,const InterestedObjects& interestedObjects,uint32 data=NULL) = 0;
};
